﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>

int My_atoi(const char* str)
{
	int i = 0;
	int f = 0;//判断正负数变量

	char* start = NULL;//数字起始位置
	char* end = NULL;//数字结束位置

	while (*(str + i))
	{
		if (*(str + i) == ' ')//跳过空格
		{
			i++;
			continue;
		}
		else if (*(str + i) == '+'|| *(str + i) == '-')//判断正负数
		{
			if (f != 0)
			{
				return 0;
			}
			if (*(str + i) == '+')
			{
				f = 1;
			}
			else
			{
				f = 2;
			}
			
		}
		else if ('9' >= (*(str + i))&& (*(str + i)) >= '0')//判断数字，如果是数字记录起始或结束位置
		{
			if (start == NULL)
			{
				start = str+i;
			}
			else
			{
				end = str+i;
			}
		}
		else
		{
			return 0;//如果不是数字字符串直接返回0
		}
		i++;
	}


	i = 0;
	int j = 0;
	int num = 0;
	int num2 = 0;
	while (end - i >= start)

	{
		num = (*end - i) - 48;
		for (j = i; j > 0; j--)
		{
			num *= 10;
		}
		num2 += num;
		i++;
	}


	if (f == 2)
	{
		num2 -= 2 * num2;
	}
	return num2;
}int main() {
	
	const char* str1 = "12345";
	const char* str2 = "runoob.com";
	const char* str3 = " -12345";

	//int num1 = atoi(str1);
	//int num2 = atoi(str2); // 这里会返回0，因为字符串不是纯数字
	//int num3 = atoi(str3); // 这里会处理前面的空格和负号
	int num1 = My_atoi(str1);
	int num2 = My_atoi(str2); // 这里会返回0，因为字符串不是纯数字
	int num3 = My_atoi(str3); // 这里会处理前面的空格和负号

	printf("数字字符串 \"%s\" 转换为整数: %d\n", str1, num1);
	printf("非数字字符串 \"%s\" 转换为整数: %d\n", str2, num2);
	printf("带空格和负号的数字字符串 \"%s\" 转换为整数: %d\n", str3, num3);

	return 0;
}


